#pragma once

#include <string>

namespace GPUCC
{
	class Config
	{
	public:
		Config();
		~Config();

		void Load(const std::string& Path);

		std::string GetSignaturesFolder() const;
		unsigned int GetGPUMaxFileSize() const;
		bool IsMaxFileSizeLimit() const;
		unsigned int GetMaxFileSize() const;
		std::string GetPlatformName() const;
		std::string GetGPUName() const;
		unsigned int GetMaxNumberOfGroups() const;
		unsigned int GetMaxSizeOfGroup() const;
		unsigned int GetMaxFileSizeWithoutStreaming() const;
		unsigned int GetMaxNumberOfStreamGroups() const;
		unsigned int GetMaxSizeOfStreamGroup() const;

	private:
		void Parse(const std::string& Value);
		void Validate();

		std::string m_SignaturesFolder;
		unsigned int m_GPUMaxFileSize;
		unsigned int m_MaxFileSize;
		std::string m_PlatformName;
		std::string m_GPUName;
		unsigned int m_MaxNumberOfGroups;
		unsigned int m_MaxSizeOfGroup;
		unsigned int m_MaxFileSizeWithoutStreaming;
		unsigned int m_MaxNumberOfStreamGroups;
		unsigned int m_MaxSizeOfStreamGroup;
	};
}